﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Cliente
{
    public partial class frmProduccionRegistro : Form
    {
        private TrupalTVCBL.LineaBL oLineaBL;
        private TrupalTVCBL.ProductoBL oProductoBL;
        private TrupalTVCBL.SupervisorBL oSupervisorBL;
        private TrupalTVCBL.TurnoBL oTurnoBL;
        private TrupalTVCBL.ProduccionBL oProduccionBL;

        public frmProduccionRegistro()
        {
            InitializeComponent();
            oLineaBL = new TrupalTVCBL.LineaBL();
            oProductoBL = new TrupalTVCBL.ProductoBL();
            oSupervisorBL = new TrupalTVCBL.SupervisorBL();
            oTurnoBL = new TrupalTVCBL.TurnoBL();
            oProduccionBL = new TrupalTVCBL.ProduccionBL();
        }

        private void btnParos_Click(object sender, EventArgs e)
        {
            #region VALIDACIONES
            if (cmbLinea.SelectedIndex == -1)
            {
                MessageBox.Show("Debe seleccionar la LINEA  de producción", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            if (cmbProducto.SelectedIndex == -1)
            {
                MessageBox.Show("Debe seleccionar el PRODUCTO", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            if (cmbSupervisor.SelectedIndex == -1)
            {
                MessageBox.Show("Debe seleccionar el SUPERVISOR", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            if (dtpFechaInicio.Value.Date > dtpFechaFin.Value.Date)
            {
                MessageBox.Show("La FECHA INICIO no puede ser superior a la FECHA FIN", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            #endregion 

            frmParoRegistrar oFrm = new frmParoRegistrar();
            oFrm.nudTF.Value = this.nudTF.Value;
            oFrm.txtTurno.Text = this.cmbTurno.Text;
            oFrm.txtLinea.Text = this.cmbLinea.Text;
            oFrm.txtFecha.Text = this.dtpFechaTV.Text;
            oFrm.txtProducto.Text = this.cmbProducto.Text;
            oFrm.txtHoraInicio.Text = this.dtpHoraInicio.Text;
            oFrm.txtHoraFin.Text = this.dtpHoraFin.Text;
            if (oFrm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                this.nudTCNV.Value = oFrm.nudCNV.Value;
                this.nudTPP.Value = oFrm.nudP.Value;
                this.nudTPNP.Value = oFrm.nudNP.Value;

            }

            oFrm.Dispose();


            try 
	        {
                CalcularTTD();
	        }
	        catch
	        {
		    }
            
        }

        private void btnObservados_Click(object sender, EventArgs e)
        {
            new frmObservadosRegistrar().ShowDialog();

        }

        private void frmProduccionRegistro_Load(object sender, EventArgs e)
        {
            cmbLinea.DataSourceBind(oLineaBL.ListarLineas(), "LINVC_DESLINEA");
            cmbSupervisor.DataSourceBind(oSupervisorBL.ListarSupervisor(), "SUPVC_NOMSUPER");
            cmbTurno.DataSourceBind(oTurnoBL.ListarTurnos(), "TURVC_DESTURNO");
        }

        private void cmbLinea_SelectedIndexChanged(object sender, EventArgs e)
        {
            TrupalTVCEF.TBMANLINEA Linea = new TrupalTVCEF.TBMANLINEA();
            Linea = ((TrupalTVCEF.TBMANLINEA)cmbLinea.SelectedItem);

            cmbProducto.DataSourceBind(oProductoBL.ListarProductos(Linea), "PROVC_DESPRODU");

            nudVelocidadLin.Value = Linea.LINDC_VELLINEA;
        }

        private void btnRegistrar_Click(object sender, EventArgs e)
        {
            #region VALIDACIONES
            if (cmbLinea.SelectedIndex == -1)
            {
                MessageBox.Show("Debe seleccionar la LINEA  de producción","Advertencia",MessageBoxButtons.OK,MessageBoxIcon.Warning);
                return;
            }
            if (cmbProducto.SelectedIndex == -1)
            {
                MessageBox.Show("Debe seleccionar el PRODUCTO", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            if (cmbSupervisor.SelectedIndex == -1)
            {
                MessageBox.Show("Debe seleccionar el SUPERVISOR", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            if (dtpFechaInicio.Value.Date > dtpFechaFin.Value.Date)
            {
                MessageBox.Show("La FECHA INICIO no puede ser superior a la FECHA FIN", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            #endregion 

            TrupalTVCEF.TBPROPRODUCCION oTBPROPRODUCCION = new TrupalTVCEF.TBPROPRODUCCION();
            TrupalTVCEF.TBPROTVC oTBPROTVC = new TrupalTVCEF.TBPROTVC();

            oTBPROTVC.LININ_CORLINEA = ((TrupalTVCEF.TBMANLINEA)cmbLinea.SelectedItem).LININ_CORLINEA;
            oTBPROTVC.PROIN_CORPRODU = ((TrupalTVCEF.TBMANPRODUCTO)cmbProducto.SelectedItem).PROIN_CORPRODU;
            oTBPROTVC.SUPIN_CORSUPER = ((TrupalTVCEF.TBMANSUPERVISOR)cmbSupervisor.SelectedItem).SUPIN_CORSUPER;
            oTBPROTVC.TVCDT_FECTVPR = dtpFechaTV.Value;


            oTBPROTVC.TVCDT_FECINICI = dtpFechaInicio.Value;
            oTBPROTVC.TVCDT_HORINICI = dtpHoraInicio.Value;
            oTBPROTVC.TVCDT_FECTERMI = dtpFechaFin.Value;
            oTBPROTVC.TVCDT_HORTERMI = dtpHoraFin.Value;
            oTBPROTVC.TURIN_CORTURNO = ((TrupalTVCEF.TBMANTURNO)cmbTurno.SelectedItem).TURIN_CORTURNO;

            oTBPROTVC.TVCIN_CANPERHN = nudCantPersHN.Value;
            oTBPROTVC.TVCIN_CANPERHE = nudCantPersHE.Value;
            oTBPROTVC.TVCDC_VELLINEA = nudVelocidadLin.Value;
            oTBPROTVC.TVCIN_VALTTD = Convert.ToInt32(nudTTD.Value);

            oTBPROTVC.TVCDC_PROREAL = nudProdTeo.Value;
            //Envases vacios

            oTBPROTVC.TVCIN_X24ENVAS =Convert.ToInt32(nudX24.Value);
            oTBPROTVC.TVCIN_X48ENVAS = Convert.ToInt32(nudX48.Value);
            oTBPROTVC.TVCIN_X96ENVAS = Convert.ToInt32(nudX96.Value);
            oTBPROTVC.TVCIN_SPKENVAS = Convert.ToInt32(nudSixpack.Value);

            //TIEMPOS
            oTBPROTVC.TVCIN_VALTCNV = Convert.ToInt32(nudTCNV.Value);
            oTBPROTVC.TVCIN_VALTPNP = Convert.ToInt32(nudTPNP.Value);
            oTBPROTVC.TVCIN_VALTPP = Convert.ToInt32(nudTPP.Value);
            oTBPROTVC.TVCIN_VALTTT = Convert.ToInt32(nudTTT.Value);



            oTBPROTVC.TVCCH_FLGESTAD = "A";
            oTBPROTVC.TVCDT_FECCREAC = DateTime.Now;
            oTBPROTVC.TVCDT_FECMODIF = DateTime.Now;

            oTBPROTVC.TVCVC_NUMLOTE = "";
            oTBPROTVC.USUIN_CORUSUAR = 1;
            Int64 IdTVC = oProduccionBL.RegistrarTVC(oTBPROTVC);
            if (IdTVC > 0)
            {
                MessageBox.Show("Registro satisfactorio - ID " + IdTVC, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.Close();
            }
            else
            {
                MessageBox.Show("No se pudo realizar el registro", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);

            }

        }
        #region CALCULOS*************************************************************************************************

        private void CalcularProdTeorica()
        {
            try 
	        {	        
		        decimal valor= 0;
                    valor = Convert.ToDecimal(nudVelocidadLin.Value) * Convert.ToDecimal(nudTTT.Value);

                    nudProdTeo.Value = valor;
	        }
	        catch
	        {
	        }
            
        }

        private void CalcularTTD()
        {
            DateTime FInicio = dtpFechaInicio.Value.Date;
            DateTime FFin = dtpFechaFin.Value.Date;
            long lTotalMinutesElapsed = 0;

            FInicio = FInicio.AddHours(dtpHoraInicio.Value.Hour).AddMinutes(dtpHoraInicio.Value.Minute).AddSeconds(dtpHoraInicio.Value.Second);

            FFin = FFin.AddHours(dtpHoraFin.Value.Hour).AddMinutes(dtpHoraFin.Value.Minute).AddSeconds(dtpHoraFin.Value.Second);
            
            TimeSpan tsDiff = FFin.Subtract(FInicio);

            lTotalMinutesElapsed = (tsDiff.Days * (24 * 60)) + (tsDiff.Hours * 60) + tsDiff.Minutes;
                    

            nudTTD.Value = Convert.ToDecimal(lTotalMinutesElapsed);

            CalcularProdTeorica();
        }

        private void CalcularCTE()
        {
            //VARIABLES
            decimal FACTOR, ELO,CTE;

            FACTOR =  ELO =CTE= decimal.Zero;

            //GET           
            ELO = nudEnvasesLO.Value;

            TrupalTVCEF.TBMANLINEA Linea = ((TrupalTVCEF.TBMANLINEA)cmbLinea.SelectedItem);

            if (Linea.LINVC_DESLINEA.ToUpper().StartsWith("TALL"))
                FACTOR = 48;
            else if (Linea.LINVC_DESLINEA.ToUpper().StartsWith("BABY"))
                FACTOR = 96;

            //CALCULOS
            if (FACTOR != decimal.Zero)
                CTE = ELO / FACTOR;
            else
                CTE = decimal.Zero;
           
            //SET
            nudCajasTE.Value = CTE;
        }

        private void CalcularIndicadores()
        {
            //VARIABLES
            decimal TIEMPO, VELOCIDAD, CALIDAD, TVC, TCNV, TPP, TPNP, TTT, TTD, EVU, PT, ELO, CTE;

            TIEMPO = VELOCIDAD = CALIDAD = TVC = TCNV = TPP = TPNP = TTT = TTD = EVU = PT = ELO = CTE = decimal.Zero;

            //GET
            TTT =  nudTTT.Value;
            TTD = nudTTD.Value;
            TCNV = nudTCNV.Value;

            EVU = nudEnvasesVU.Value;
            PT = nudProdTeo.Value;
            ELO = nudEnvasesLO.Value;

            //CALCULOS

            if (TTD - TCNV != decimal.Zero)
                TIEMPO = TTT / (TTD - TCNV);
            else
                TIEMPO = decimal.Zero;

            if (PT != decimal.Zero)
                VELOCIDAD = EVU / PT;
            else
                VELOCIDAD = decimal.Zero;

            if (ELO != decimal.Zero)
                CALIDAD = (ELO - CTE) / ELO;
            else
                CALIDAD = decimal.Zero;

            TVC = TIEMPO * VELOCIDAD * CALIDAD;

            //SET
            nudIndTiempo.Value = TIEMPO ;
            nudIndVelocidad.Value = VELOCIDAD;
            nudIndCalidad.Value = CALIDAD;
            nudIndTVC.Value = TVC ;
        }

        private void CalcularTiempos()
        {
            //VARIABLES
            decimal TCNV, TPP, TPNP, TTT, TTD,PT,EVU,VL, TF;

            TCNV = TPP = TPNP = TTT = TTD=PT= EVU=VL = TF= decimal.Zero;

            //GET
            TTD = nudTTD.Value;
            TCNV = nudTCNV.Value;
            TPP = nudTPP.Value;
            TPNP = nudTPNP.Value;
            EVU = nudEnvasesVU.Value;
            VL=nudVelocidadLin.Value;
            PT = nudProdTeo.Value;

            //CALCULOS
            TTT = TTD - (TCNV + TPP + TPNP);

            if (VL != decimal.Zero)
                TF = (PT - EVU) / VL;
            else
                TF = decimal.Zero;

            //SET
            nudTTT.Value = TTT;
            nudTF.Value = TF;
           
        }

        #endregion CALCULOS*************************************************************************************************

        private void dtpFechaInicio_ValueChanged(object sender, EventArgs e)
        {
            CalcularTTD();
        }

        private void dtpFechaFin_ValueChanged(object sender, EventArgs e)
        {
            CalcularTTD();
        }

        private void dtpHoraInicio_ValueChanged(object sender, EventArgs e)
        {
            CalcularTTD();
        }

        private void dtpHoraFin_ValueChanged(object sender, EventArgs e)
        {
            CalcularTTD();

        }

        private void nudEnvasesVO_ValueChanged(object sender, EventArgs e)
        {
            CalcularCTE();

            CalcularIndicadores();
        }

        private void nudTTT_ValueChanged(object sender, EventArgs e)
        {
            CalcularIndicadores();
        }

        private void nudTTD_ValueChanged(object sender, EventArgs e)
        {
            CalcularTiempos();
            CalcularIndicadores();
            
        }

        private void nudTCNV_ValueChanged(object sender, EventArgs e)
        {
            CalcularTiempos();
            CalcularIndicadores();
        }

        private void nudEnvasesVU_ValueChanged(object sender, EventArgs e)
        {
            CalcularTiempos();
            CalcularIndicadores();
        }

        private void nudProdTeo_ValueChanged(object sender, EventArgs e)
        {
            CalcularTiempos();
            CalcularIndicadores();
        }

        private void nudTPP_ValueChanged(object sender, EventArgs e)
        {
            CalcularTiempos();
        }

        private void nudTPNP_ValueChanged(object sender, EventArgs e)
        {
            CalcularTiempos();
        }

        private void nudVelocidadLin_ValueChanged(object sender, EventArgs e)
        {
            CalcularTiempos();
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Close();
        }
        
    }
}
